您可以將 APISIX 網關作為所有業務的流量入口,它提供了 動態路由、動態上游、動態憑證、A/B 測試、灰度發布(金絲雀發布)、藍綠部署、限速、防攻擊、收集指標、監控警報、可觀測性、服務治理 等功能。
--〈APISIX文件-入門指南〉
「斷路器/限流」一章中,示範了以限流/限速和斷路器的插件保護上游的方式。此外,APISIX還可以與身份驗證服務配合,透過身份驗證的插件,保護上游的存取,包含key-auth
、basic-auth
、ldap-auth
、jwt-auth
、openid-connect
、authz-keycloak
、opa
、forward-auth
、multi-auth
插件等。
key-auth
效果其實就像是[Admin API]使用X-API-KEY
作為驗證一樣。類似的,可以將「新竹百貨公司」只提供給VIP進入。為了使用插件,需要在apisix_config/config.yaml
的plugins
啓用該插件(預設是啓用的):
plugins:
- key-auth # priority: 2500
- openid-connect # priority: 2599
- cas-auth # priority: 2597
- authz-casbin # priority: 2560
- authz-casdoor # priority: 2559
- wolf-rbac # priority: 2555
- ldap-auth # priority: 2540
- hmac-auth # priority: 2530
- basic-auth # priority: 2520
- jwt-auth # priority: 2510
- consumer-restriction # priority: 2400
- forward-auth # priority: 2002
- opa # priority: 2001
- authz-keycloak # priority: 2000
同樣可以在apisix_dashboard_config/config.yaml
啓用該插件,好讓在Dashboard Web UI同樣可以進行設定調整。
然後針對「新竹百貨公司」的路由添加key-auth
插件:
{
"_meta": {
"disable": true
},
"header": "X-VIP-KEY",
"hide_credentials": true
}
接著,要透過Consumer建立一個可用的X-VIP-KEY
。
建立Bob
Consumer,然後同樣找到key-auth
插件,將key
設置為bob-key
。
現在直接瀏覽 http://新竹百貨公司.com:9080/ 會被拒於門外。
需要在請求Header添加X-VIP-KEY
:
curl http://新竹百貨公司.com:9080/ \
-H 'X-VIP-KEY: bob-key'
可以將key-auth
改成basic-auth
,透過驗證帳號密碼登入的方式驗證。
該插件不需要額外的參數。同樣的在Bob
的Consumer也需要提供帳號密碼的設置。
再一次瀏覽 http://新竹百貨公司.com:9080/ 時,會跳出輸入帳號密碼的提示框,正確輸入帳密即可進入百貨公司。
注意:
9080
端口使用HTTP服務,建議實際使用參考「TLS」一章設置,改用9443
端口。
更多的時候,不會由APISIX的Consumer提供VIP-KEY
,可能會將Key放在專用的Vault系統。密碼也不會直接使用APISIX進行設定,而是使用其他身份驗證服務,比如LDAP、OIDC。APISIX甚至可以配合Keycloak的授權機制系統(Authorization),顆粒化(fine-grained)的放行請求,或是透過其他第三方到授權引擎如OpenPolicy Agent(opa)、Casdoor協助處理。亦可以結合多個驗證機制multi-auth
或將驗證轉發forward-auth
。
但其實還有一點很重要的事!不管是限流、斷路器,還是這些身份驗證的插件,如果有機會繞過APISIX直達上游服務節點的話,一切都沒有意義。因此這部分依然而需要好好考量,是應該透過防火牆還是其他方式防範?
直達「新竹百貨公司」節點,繞過身份驗證,可以直接連線 http://127.0.0.1:8081 。